﻿#region << 文 件 说 明 >>
/*----------------------------------------------------------------
// 文件名称：ModelHelper
// 创 建 者：杨程
// 创建时间：2021/10/13 19:24:25
// 文件版本：V1.0.0
// ===============================================================
// 功能描述：
//		
//
//----------------------------------------------------------------*/
#endregion

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace V.CodeGenerator.CreateCodes.Model
{
    /// <summary>
    /// V.CodeGenerator.CreateCode的模型扩展方法
    /// </summary>
    public static class ModelHelper
    {
        /// <summary>
        /// ModelPoco添加字段
        /// </summary>
        /// <param name="model"></param>
        /// <param name="detail"></param>
        /// <returns></returns>
        public static ModelPoco AddProp(this ModelPoco model, ModelDtlPoco detail)
        {
            if (!model.ModelDtlPocos.Contains(detail))
            {
                model.ModelDtlPocos.Add(detail);
            }

            return model;
        }

        /// <summary>
        /// 获取模块功能集合
        /// </summary>
        /// <param name="poco"></param>
        /// <param name="moduleFunctionPocos"></param>
        /// <returns></returns>
        public static ProjectPoco GetModuleFunction(this ProjectPoco poco,List<ModulePoco> moduleFunctionPocos)
        {
            poco.ModuleFunctionPocos.Clear();
            poco.ModuleFunctionPocos.AddRange(moduleFunctionPocos);

            return poco;
        }

        ///// <summary>
        ///// 构建ModuleFunction的树形结构
        ///// </summary>
        ///// <param name="poco"></param>
        ///// <param name="FatherId"></param>
        ///// <returns></returns>
        //public static ProjectPoco BuildModuleFunctionTree(this ProjectPoco poco,string FatherId)
        //{
        //    if (!poco.ModuleFunctionPocos.Any())
        //    {
        //        return poco;
        //    }

        //    var father = poco.ModuleFunctionPocos.FirstOrDefault(w => w.ParentId == FatherId);
        //    if (father==null)
        //    {
        //        return poco;
        //    }
        //    poco.ModuleFunction_Tree.Clear();

        //    GetModuleFunctionChilds(poco.ModuleFunctionPocos, father);

        //    poco.ModuleFunction_Tree.Add(father);

        //    return poco;
        //}

        //public static ProjectPoco InsertChild(this ProjectPoco poco,ModuleFunctionPoco entity)
        //{
        //    if (entity.moduleFunctionType== ModuleFunctionType.Module)
        //    {
        //        poco.ModuleFunction_Tree.Find(f => f.DtlId == entity.ParentId).Childs.Add(entity);
        //    }

        //    if (entity.moduleFunctionType== ModuleFunctionType.Function)
        //    {
        //        var list = poco.ModuleFunction_Tree[0].Childs;
        //        foreach (var item in list)
        //        {
        //            if (item.DtlId==entity.ParentId)
        //            {
        //                item.Childs.Add(entity);
        //            }
        //        }
        //    }

        //    return poco;
            
        //}

        

        private static void GetModuleFunctionChilds(List<ModulePoco> source,ModulePoco father)
        {
            //var currentChilds = source.Where(w => w.ParentId == father.DtlId).ToList();
            //father.Childs = new System.Collections.ObjectModel.ObservableCollection<ModuleFunctionPoco>(currentChilds);
            //foreach (var item in currentChilds)
            //{
            //    GetModuleFunctionChilds(source, item);
            //}
        }

        /// <summary>
        /// 获取entity模型集合
        /// </summary>
        /// <param name="poco"></param>
        /// <param name="modelPocos"></param>
        /// <returns></returns>
        public static ProjectPoco GetModelPoco(this ProjectPoco poco,List<ModelPoco> modelPocos)
        {
            poco.ModelPocos.Clear();
            poco.ModelPocos.AddRange(modelPocos);
            return poco;
        }
        
        /// <summary>
        /// 获取modeldtl集合
        /// </summary>
        /// <param name="poco"></param>
        /// <param name="modelDtlPocos"></param>
        /// <returns></returns>
        public static ModelPoco GetModelDtl(this ModelPoco poco,List<ModelDtlPoco> modelDtlPocos)
        {
            poco.ModelDtlPocos.Clear();
            poco.ModelDtlPocos.AddRange(modelDtlPocos);
            return poco;
        }

        /// <summary>
        /// 获取ViewPoco集合
        /// </summary>
        /// <param name="poco"></param>
        /// <param name="ViewPocos"></param>
        /// <returns></returns>
        public static ProjectPoco GetViewPoco(this ProjectPoco poco, List<ViewPoco> ViewPocos)
        {
            poco.ViewPocos.Clear();
            poco.ViewPocos.AddRange(ViewPocos);
            return poco;
        }

        /// <summary>
        /// 获取Controls
        /// </summary>
        /// <param name="poco"></param>
        /// <param name="controlPocos"></param>
        /// <returns></returns>
        public static ViewPoco GetControls(this ViewPoco poco,List<ControlPoco> controlPocos)
        {
            poco.Controls.Clear();
            poco.Controls.AddRange(controlPocos);
            return poco;
        }
    }
}
